/**
 * @description 路由配置
 * @description 1. 自动导入模块路由
 * @description 2. 创建路由
 * @description 3. 路由守卫
 * @description 4. 导出路由
 */
import { createRouter, createWebHashHistory } from 'vue-router'
import guard from './guard'

// 类型
import type { RouteRecordRaw } from 'vue-router'
interface FileModule {
  default: RouteRecordRaw & {
    isDemo?: boolean
    showDemo?: boolean
  };
}

// 自动导入所有模块路由
const modules: (FileModule & RouteRecordRaw)[] = []
const files = import.meta.glob<FileModule & RouteRecordRaw>([
  '@/modules/**/*.router.ts',
  '@/modules/**/*.router.js',
  '@/docs/router.ts'
], { eager: true })

// 过滤 demo 组件
Object.keys(files).forEach((key) => {
  const moduleRoutes = files[key].default || files[key]

  // 开发环境过滤 demo 组件
  if (!import.meta.env.DEV && /demo/.test(key) && !moduleRoutes.showDemo) return

  // 添加模块
  modules.push(files[key])
})

// 处理路由模块
const routes: RouteRecordRaw[] = []
modules.forEach((module) => {
  const moduleRoutes = module.default || module
  if (!import.meta.env.DEV && moduleRoutes.isDemo === true) return
  routes.push(moduleRoutes)
})

// 创建路由
const router = createRouter({
  history: createWebHashHistory(),// hash 模式
  routes: [
    ...routes,
    {
      path: '/403',
      name: '403',
      component: () => import('@/common/pages/error-page/403.vue')
    },
    {
      path: '/404',
      name: '404',
      component: () => import('@/common/pages/error-page/404.vue')
    },
    {
      path: '/:pathMatch(.*)*',
      redirect: '/404'
    }
  ]
})

// 路由守卫
guard(router)

// 导出路由
export default router